很多時候,開發者為了防止這種情形發生,一般都會對文件進行檢查,最常見的方法有:
這種方法很容易被繞過,因為有一些檢查函式是 C 或是 PHP 的字串處理函式,這種常常在文件後面加上 %00 就會被繞過了。 另外受影響的也有可能是 server ,像是只允許上傳 JPEG 圖片,但透過修改 POST 封包,將檔名改為 xxx.php[\0].jpg ,其中 [\0] 為十六進制的 0x00 , .jpg 的後綴成功讓檢查函式允許,但透過 server 端解釋時,卻因為 0x00 的截斷,使得檔案被以 PHP 執行。
2.檢查 Magic Byte:
因為每種 filetype 都有不同的 Magic Byte ,故有些開發者是透過檢查 Magic Byte 以辨認檔案類型。 這種方法能成功抵禦上面所提到的問題,但透過修改 Magic Byte 也可以輕鬆繞過此限制。
這裡簡單介紹基本的繞過手法,接著下篇會藉由 server 本身處理文件的特性來進行繞過,請拭目以待